
[dbo].[asi_DocumentKeysByPath]
CREATE PROC [dbo].[asi_DocumentKeysByPath]
@documentPath nvarchar(2000),
@organizationKey uniqueidentifier,
@userKey uniqueidentifier,
@loggedInUserGroupKey uniqueidentifier = '00000000-0000-0000-0000-000000000000',
@ignoreLicensing bit = 0,
@rootHierarchyKey uniqueidentifier OUT,
@hierarchyKey uniqueidentifier OUT,
@documentVersionKey uniqueidentifier OUT,
@documentKey uniqueidentifier OUT
AS
BEGIN
DECLARE
@parent uniqueidentifier,
@relatedDocumentVersionKey uniqueidentifier,
@relatedDocumentKey uniqueidentifier,
@relatedHierarchyKey uniqueidentifier,
@documentRootName nvarchar(100),
@documentName nvarchar(100),
@ptr int,
@documentPathWorking nvarchar(2000)
SET @ptr = CHARINDEX(N'/', @documentPath)
IF @ptr > 0
BEGIN
SET @documentRootName = SUBSTRING(@documentPath, 1, @ptr - 1)
SET @documentPath = SUBSTRING(@documentPath, @ptr + 1, LEN(@documentPath) - @ptr)
END
ELSE
BEGIN
IF EXISTS (SELECT 1 FROM HierarchyRoot WHERE HierarchyRootName = @documentPath)
BEGIN
SET @documentRootName = @documentPath
SET @documentPath = ''
END
ELSE
BEGIN
SET @documentRootName = N'$'
IF @documentPath = N'$'
SET @documentPath = ''
END
END
DECLARE @HierarchyRoots TABLE (
RootHierarchyKey uniqueidentifier,
HierarchyKey uniqueidentifier,
UniformKey uniqueidentifier,
DocumentKey uniqueidentifier,
Checked bit
)
INSERT INTO @HierarchyRoots
SELECT a.RootHierarchyKey,
b.HierarchyKey,
b.UniformKey,
c.DocumentKey,
0
FROM HierarchyRoot a inner join Hierarchy b on a.RootHierarchyKey = b.HierarchyKey
left join DocumentMain c ON b.UniformKey = c.DocumentVersionKey AND c.DocumentStatusCode IN (40,60)
WHERE a.HierarchyRootName = @documentRootName
AND a.OrganizationKey = @organizationKey
AND (@rootHierarchyKey IS NULL OR @rootHierarchyKey = '00000000-0000-0000-0000-000000000000' OR a.RootHierarchyKey = @rootHierarchyKey)
AND EXISTS(
SELECT 1
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = a.AccessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0)
WHILE @hierarchyKey IS NULL AND @documentVersionKey IS NULL AND @documentKey IS NULL AND EXISTS (SELECT 1 FROM @HierarchyRoots WHERE Checked = 0)
BEGIN
SET @documentPathWorking = @documentPath
SELECT @rootHierarchyKey = RootHierarchyKey,
@hierarchyKey = HierarchyKey,
@documentVersionKey = UniformKey,
@documentKey = DocumentKey
FROM @HierarchyRoots
WHERE Checked = 0
IF @rootHierarchyKey IS NOT NULL
BEGIN
UPDATE @HierarchyRoots SET Checked = 1 WHERE RootHierarchyKey = @rootHierarchyKey
SET @hierarchyKey = @rootHierarchyKey
SET @parent = @rootHierarchyKey
WHILE LEN(@documentPathWorking) > 0
BEGIN
SET @ptr = CHARINDEX(N'/', @documentPathWorking)
IF @ptr > 0
BEGIN
SET @documentName = SUBSTRING(@documentPathWorking, 1, @ptr - 1)
SET @documentPathWorking = SUBSTRING(@documentPathWorking, @ptr + 1, LEN(@documentPathWorking) - @ptr)
END
ELSE
BEGIN
SET @documentName = @documentPathWorking
SET @documentPathWorking = N''
END
IF LEN(@documentName) > 0
BEGIN
SET @documentKey = null
SET @documentVersionKey = null
SET @hierarchyKey = null
DECLARE @t1 TABLE (
ParentHierarchyKey uniqueidentifier,
HierarchyKey uniqueidentifier,
DocumentVersionKey uniqueidentifier,
DocumentKey uniqueidentifier,
RelatedDocumentVersionKey uniqueidentifier,
AccessKey uniqueidentifier,
CreatedOn datetime
)
DELETE FROM @t1
INSERT INTO @t1 (ParentHierarchyKey, HierarchyKey, DocumentVersionKey, DocumentKey, RelatedDocumentVersionKey, AccessKey, CreatedOn)
SELECT
Hierarchy.ParentHierarchyKey,
Hierarchy.HierarchyKey,
DocumentMain.DocumentVersionKey,
DocumentMain.DocumentKey,
DocumentMain.RelatedDocumentVersionKey,
DocumentMain.AccessKey,
DocumentMain.CreatedOn
FROM Hierarchy INNER JOIN DocumentMain ON Hierarchy.UniformKey = DocumentMain.DocumentVersionKey
WHERE Hierarchy.RootHierarchyKey = @rootHierarchyKey
AND Hierarchy.ParentHierarchyKey = @parent
AND DocumentMain.DocumentName = @documentName
SELECT TOP 1 @parent = a.ParentHierarchyKey,
@hierarchyKey = a.HierarchyKey,
@documentVersionKey = a.DocumentVersionKey,
@documentKey = a.DocumentKey,
@relatedDocumentVersionKey = a.RelatedDocumentVersionKey
FROM @t1 AS a
WHERE EXISTS(
SELECT 1
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = a.AccessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0)
AND (@ignoreLicensing = 1
OR NOT EXISTS (SELECT 1 FROM UniformLicense WHERE UniformKey = a.DocumentVersionKey)
OR EXISTS(
SELECT 1
FROM [dbo].[UniformLicense] INNER JOIN [dbo].[LicenseLegacyList] l ON UniformLicense.LicenseKey = l.LicenseLegacyKey
WHERE UniformLicense.UniformKey = a.DocumentVersionKey))
ORDER BY a.CreatedOn DESC
IF @@ROWCOUNT = 0
BEGIN
SET @parent = NULL
SET @documentPathWorking = NULL
END
ELSE
BEGIN
IF (@hierarchyKey IS NOT NULL)
SET @parent = @hierarchyKey
IF (@relatedDocumentVersionKey IS NOT NULL)
BEGIN
SELECT top 1 @relatedHierarchyKey = HierarchyKey, @relatedDocumentKey = DocumentMain.DocumentKey
FROM Hierarchy INNER JOIN DocumentMain ON Hierarchy.UniformKey = DocumentMain.DocumentVersionKey
WHERE Hierarchy.RootHierarchyKey = @rootHierarchyKey
AND DocumentMain.DocumentVersionKey = @relatedDocumentVersionKey
AND EXISTS(
SELECT 1
FROM AccessItem INNER JOIN UserToken ON AccessItem.Grantee = UserToken.Grantee OR AccessItem.Grantee = @loggedInUserGroupKey
WHERE AccessItem.AccessKey = DocumentMain.AccessKey
AND UserToken.UserKey = @userKey
AND (AccessItem.Permission&3)>0)
AND (@ignoreLicensing = 1
OR NOT EXISTS (SELECT 1 FROM UniformLicense WHERE UniformKey = DocumentMain.DocumentVersionKey)
OR EXISTS(
SELECT 1
FROM [dbo].[UniformLicense] INNER JOIN [dbo].[LicenseLegacyList] l ON UniformLicense.LicenseKey = l.LicenseLegacyKey
WHERE UniformLicense.UniformKey = DocumentMain.DocumentVersionKey))
ORDER BY DocumentMain.CreatedOn DESC
IF @@ROWCOUNT = 1 AND @relatedHierarchyKey IS NOT NULL
BEGIN
SET @parent = @relatedHierarchyKey
SET @documentKey = @relatedDocumentKey
END
END
END
END
END
END
END
END
GO